<script lang="ts" setup>
import { useVbenModal } from '@vben/common-ui';
import { useVbenForm } from '#/adapter/form';
import { addMeteringStation } from '#/api/gis/meteringStation';
import type { AddMeteringStationParams } from '#/api/gis/meteringStation';
import { z } from '#/adapter/form';
import { message } from 'ant-design-vue';

const [AddModal, AddmodalApi] = useVbenModal({
});

const [BaseForm] = useVbenForm({
  commonConfig: {
    componentProps: {
      class: 'w-full',
    },
  },
  handleSubmit: onSubmit,
  layout: 'horizontal',
  schema: [
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入计量间编号',
      },
      fieldName: 'stationCode',
      label: '计量间编号',
      rules: "required",
    },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入计量间名称',
      },
      fieldName: 'stationName',
      label: '计量间名称',
      rules: z.string().min(1, { message: '请输入计量间名称' }),
    },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入经度',
      },
      fieldName: 'longitude',
      label: '经度',
      rules: z.string()
        .min(1, { message: '请输入经度' })
        .refine((value) => {
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= -180 && numValue <= 180;
        }, {
          message: '经度必须在 -180 到 180 之间',
        }),
    },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入纬度',
      },
      fieldName: 'latitude',
      label: '纬度',
      rules: z.string()
        .min(1, { message: '请输入纬度' })
        .refine((value) => {
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= -90 && numValue <= 90;
        }, {
          message: '纬度必须在 -90 到 90 之间',
        }),
    },
    // {
    //   component: 'Select',
    //   componentProps: {
    //     allowClear: true,
    //     filterOption: true,
    //     options: [
    //       {
    //         label: '工作区1',
    //         value: '1',
    //       },
    //       {
    //         label: '工作区2',
    //         value: '2',
    //       },
    //       {
    //         label: '工作区3',
    //         value: '3',
    //       },
    //       {
    //         label: '工作区4',
    //         value: '4',
    //       },
    //       {
    //         label: '工作区5',
    //         value: '5',
    //       },
    //       {
    //         label: '工作区6',
    //         value: '6',
    //       },
    //     ],
    //     placeholder: '请选择工作区',
    //     showSearch: true,
    //   },
    //   fieldName: 'operationArea',
    //   label: '工作区',
    //   rules: 'selectRequired',
    // },

    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入总接口数',
      },
      fieldName: 'totalInterfaces',
      label: '总接口数',
      rules: z.string()
        .min(1, { message: '请输入总接口数' })
        .refine((value) => {
          // 使用正则表达式校验是否为有效的数字格式
          const isValidNumber = /^-?\d+(\.\d+)?$/.test(value);
          if (!isValidNumber) {
            return false; // 如果不符合正则表达式，直接返回false
          }
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= 0; // 检查是否为有效数字且大于等于0
        }, {
          message: '总接口数必须是一个有效的数字且大于等于0',
        }),
    },
    
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入已使用接口数',
      },
      fieldName: 'usedInterfaces',
      label: '已使用接口数',
      rules: z.string()
        .min(1, { message: '请输入已使用接口数' })
        .refine((value) => {
          // 使用正则表达式校验是否为有效的数字格式
          const isValidNumber = /^-?\d+(\.\d+)?$/.test(value);
          if (!isValidNumber) {
            return false; // 如果不符合正则表达式，直接返回false
          }
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= 0; // 检查是否为有效数字且大于等于0
        }, {
          message: '已使用接口数必须是一个有效的数字且大于等于0',
        }),
    },

    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入预留接口数',
      },
      fieldName: 'reservedInterfaces',
      label: '预留接口数',
      rules: z.string()
        .min(1, { message: '请输入预留接口数' })
        .refine((value) => {
          // 使用正则表达式校验是否为有效的数字格式
          const isValidNumber = /^-?\d+(\.\d+)?$/.test(value);
          if (!isValidNumber) {
            return false; // 如果不符合正则表达式，直接返回false
          }
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= 0; // 检查是否为有效数字且大于等于0
        }, {
          message: '预留接口数必须是一个有效的数字且大于等于0',
        }),
    },

    // {
    //   component: 'Input',
    //   componentProps: {
    //     placeholder: '请输入下游脱水站',
    //   },
    //   fieldName: 'downstreamDehydrationStation',
    //   label: '下游脱水站',
    //   rules:"required"
    // },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入设计处理量',
      },
      fieldName: 'capacity',
      label: '设计处理量',
      rules: z.string()
        .min(1, { message: '请输入设计处理量' })
        .refine((value) => {
          const numValue = parseFloat(value);
          return !isNaN(numValue) && numValue >= 0;
        }, {
          message: '设计处理量必须是一个有效的数字',
        }),
    },
    {
      component: 'Input',
      componentProps: {
        placeholder: '请输入备注',
      },
      fieldName: 'remark',
      label: '备注',
    },
  ],
});

// 定义一个自定义事件
const emit = defineEmits(['refreshTable']);
function onSubmit(values: Record<string, any>) {
  const params = values as AddMeteringStationParams;
  params.location = `POINT(${params.longitude} ${params.latitude})`;
  addMeteringStation(params).then(() => {
    AddmodalApi.close();
    message.success('添加计量间成功');
    emit('refreshTable'); // 触发自定义事件
  }).catch((error) => {
    console.error('添加计量间失败:', error);
  });
}
</script>

<template>
  <AddModal title="添加计量间">
    <BaseForm />
    <template #prepend-footer>
    </template>
  </AddModal>
</template>
